/**
 * @file modbus_crc.h
 * @brief MODBUS CRC16校验计算模块
 * @details 提供MODBUS协议标准的CRC16校验计算功能
 *          支持任意长度数据的CRC16计算，用于数据完整性验证
 * 
 * @author 修改团队：mastwet@Undefine Innovation
 * @date 2024
 * @copyright MIT License
 * 
 * @note 使用标准MODBUS CRC16多项式：0xA001
 * @note CRC初始值为0xFFFF，结果低位在前，高位在后
 */

#ifndef MODBUS_CRC_H
#define MODBUS_CRC_H

#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief 计算MODBUS CRC16校验码
 * @param data 数据缓冲区指针
 * @param len 数据长度（字节数）
 * @return CRC16校验码（16位无符号整数）
 * 
 * @details 使用标准MODBUS CRC16算法：
 * - 多项式：0xA001 (x^16 + x^15 + x^2 + 1)
 * - 初始值：0xFFFF
 * - 输入反转：是
 * - 输出反转：是
 * - 结果异或：0x0000
 * 
 * @note 计算结果低位在前，高位在后，符合MODBUS协议规范
 * @note 支持任意长度数据，包括空数据（返回0xFFFF）
 */
uint16_t modbus_crc16(uint8_t *data, uint16_t len);

#ifdef __cplusplus
}
#endif

#endif // MODBUS_CRC_H